# -*- coding:utf-8 -*-
from flask import current_app
from flask import json, jsonify
from flask import request

from ihome import redis_story, db
from ihome.api_1_0 import api
from ihome.models import User
from flask import session
from ihome.utils.response_code import RET
#

@api.route("/session",methods = ["DELETE"])
def loginout():
    print("退出登陆")
    # 删除session中的属性就可以了，用pop命令,如果用户是第一次访问，就添加一个None
    session.pop("mobile",None)
    session.pop("user_id",None)
    session.pop("user_name",None)

    return jsonify(errno =RET.OK,errmsg ="退出成功")


@api.route("/session", methods=["POST"])
def login():

    # 获取参数,获取手机号，获取密码
    json_dict = request.json
    mobile = json_dict.get("mobile")
    paasword = json_dict.get("password")
    print(json_dict)
    # 校验参数
    if not all([mobile,paasword]):

        return jsonify(errno=RET.DATAERR,errmsg="参数有误")

    # 去数据库中查询登陆用户的账号信息
    try:

        user = User.query.filter_by(mobile=mobile).first()

    except Exception as e:
        current_app.logger.debug(e)
        return jsonify(errno=RET.DBERR, errmsg="查询数据错误")

    # 判断用户是否存在
    if not user:
        return jsonify(errno = RET.USERERR,errmsg="用户不存在，或者用户未激活")

    # 验证密码
    if not user.check_password(paasword):
        return jsonify(errno=RET.PWDERR, errmsg="密码错误")

    # # 保持登陆状态
    session["name"] = user.name
    session["mobile"] = user.mobile
    session["user_id"] = user.id

    # 响应给前端
    return jsonify(errno=RET.OK, errmsg="登录成功")


@api.route('/user', methods=["POST"])
def register():

    # 接收前端传递过来的参数,手机号，验证码，密码
    json_dict =request.json
    mobile =json_dict.get("mobile")
    phonecode = json_dict.get("phonecode")
    password = json_dict.get("password")
    print (json_dict)
    # 校验参数
    if not all([mobile,phonecode,password]):

        return  jsonify(errno= RET.PARAMERR,errmsg = "参数错误")

    # 取出正确的验证码，进行比较
    try:
        real_phonecode = redis_story.get("Mobile:" + mobile)
    except Exception as e:

        current_app.logger.debug(e)

        return jsonify(errno = RET.DBERR,errmsg = "查询验证码失败")

    # 如果没有取到真实的验证码，说明验证码过期
    if not real_phonecode:
        return  jsonify(errno = RET.NODATA,errmsg = "无数据")
    #
    # 与真实的验证码，进行比较
    if real_phonecode != phonecode:
        return  jsonify(errno = RET.DATAERR, errmsg = "验证码错误")

    # 初始化模型，存进数据库中
    user = User()

    # 记录用户的信息
    user.mobile = mobile
    user.name = mobile


    # 保存密码，密码采用数据库加密的形式，只需要点出属性就可以了
    user.password = password

    try:
        print ("111")
        db.session.add(user)
        print ("222")

        db.session.commit()
    except Exception as e:

        # 提供数据库的回滚操作
        db.session.rollback()

        #  用日志记录异常
        current_app.logger.debug(e)
        return jsonify(errno = RET.DBERR,errmsg = "存储数据库失败")

    # 响应给前端
    return jsonify(errno = RET.OK, errmsg ="注册成功")


